package cn.tedu.exception;

import java.util.InputMismatchException;
import java.util.Scanner;

/**本类用作异常的入门案例*/
/**1.。不要害怕BUG，真正的勇士敢于直面自己写的BUG
 * 2.学会看报错的提示信息，确定自己的错误方向
 * 3.学会看报错的行号信息，确定自己报错的位置，哪里不对点哪里
 * 注意：源码不会错，要看自己的代码*/
/**如果一个方法抛出了异常，name谁来调用这个方法，谁就需要处理这个异常
 * 这里的处理也有两种方案：捕获解决和继续向上抛出
 * 但是注意：我们一般会在main()调用之前解决掉异常
 * 而不是把问题抛给main()，因为没人解决了*/
public class ExceptionDemo {
    public static void main(String[] args)  {
       // f2();
        //f1();
        //f3();
        method();
       //通过捕获处理的方式提前解决
    }

    private static void method(){
        try{
            f3();
        }catch (Exception e){
            System.out.println("请正确输入！");
        }
    }

    /**异常抛出的格式：在小括号与大括号之间写：throws 异常类型
 * 如果有多个异常，使用 , 分割即可*/
    private static void f3()throws Exception {
        System.out.println("请输入第一个数：");
        int a=new Scanner(System.in).nextInt();
        System.out.println("请输入第二个数：");
        int b=new Scanner(System.in).nextInt();
        System.out.println(a/b);
    }
/**异常捕获处理的格式
 * try{
 *     可能会出现异常的代码
 * }catch(异常类型 异常名){
 *     如果捕获到了异常进行处理的解决方案
 * }*/
/**try-catch是可以嵌套的，如果有多种异常类型需要分别处理的话
 * 如果不需要特殊处理，只需要处理，那就不需要嵌套
 * 将所有异常的子类型统一看作父类型exception来处理
 * 提供通用的解决方案，这是多态最为经典的一种用法*/
    private static void f2() {
        try {
            System.out.println("请输入第一个数：");
            int a=new Scanner(System.in).nextInt();
            System.out.println("请输入第二个数：");
            int b=new Scanner(System.in).nextInt();
            System.out.println(a/b);
        }catch (ArithmeticException e){
            System.out.println("除数不能为0!");
        }catch (InputMismatchException e){
            System.out.println("请输入规定的整数类型");
        }catch (Exception e){
            System.out.println("您输入的不对！请重新输入！");
        }
    }

    private static void f1() {
        System.out.println("请输入第一个数：");
        int a=new Scanner(System.in).nextInt();
        System.out.println("请输入第二个数：");
        int b=new Scanner(System.in).nextInt();
        System.out.println(a/b);
        //输入6与0，报错：ArithmeticException算数异常，原因出书不能为0
        //输入3与4.4，报错：InputMismatchException输入不匹配异常
    }
}
